package com.leantech.android.browser.views

import android.content.Context
import com.google.android.flexbox.FlexLine
import com.google.android.flexbox.FlexboxLayoutManager


/**
 * FlexboxLayout设置maxLines之后，如果item超出maxLines，会全部罗列在最后一行，不符合需求；
 *
 * FlexBoxLayoutMaxLines支持设置MaxLines，并截断超出MaxLines的内容；
 */
class FlexBoxMaxLinesLayout @JvmOverloads constructor(
    context: Context?
) : FlexboxLayoutManager(context) {

    var maxVisibleLines = NOT_SET
        private set


    override fun setMaxLine(maxLine: Int) {
        if(maxVisibleLines == maxLine) return
        maxVisibleLines = maxLine
        requestLayout()
    }

    /**
     * see [.getMaxLines]
     */
    override fun getMaxLine(): Int {
        return NOT_SET
    }

    init {
        maxVisibleLines = super.getMaxLine()
        super.setMaxLine(NOT_SET)
    }

    override fun getFlexLinesInternal(): List<FlexLine> {
        val flexLines = super.getFlexLinesInternal()
        val size = flexLines.size
        if (maxVisibleLines in 1..<size) {
            flexLines.subList(maxVisibleLines, size).clear()
        }
        return flexLines
    }

    fun getVisibleItemCount(): Int{
        return flexLinesInternal.sumOf { it.itemCount }
    }
}
